package com.shujia.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo2Map {
  /**
   * 转换算子：由一个RDD变成另一个RDD，是RDD之间的转换，是懒执行的，需要action算子触发执行
   * 行为算子：由一个RDD调用，但最后没有返回新的RDD，而是返回了其他数据类型，行为算子可以触发任务的执行，每个action算子都会触发一个job
   */

  def main(args: Array[String]): Unit = {

    // 构建Spark上下文环境
    val conf: SparkConf = new SparkConf()
    conf.setAppName("Demo2Map")
    conf.setMaster("local")
    val sc: SparkContext = new SparkContext(conf)


    /**
     * RDD的创建方式：
     * 1、通过textFile读取文件
     * 2、通过集合创建RDD（一般用于测试）
     */

    val listRDD: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9))

    println("map之前")
    /**
     * map是转换算子 是懒执行的
     * 需要接收一个函数f：参数为RDD中的泛型，返回值类型自定
     * 会将每一条数据依次传递个函数f进行转换
     * 最终整个map方法完成后会返回一个新的RDD
     */
    val mapRDD: RDD[Int] = listRDD.map(i => {
      println("i的值:" + i)
      i * 20
    })
    println("map之后")

    mapRDD.foreach(println)
    mapRDD.foreach(println)

    listRDD.foreach(println)
    while (true) {

    }

  }

}
